#pragma once

#include "iostream"
#include "vector"
#include "algorithm"
#include "TypeDefin.h"

using namespace std;
/*HJJ QQ479287006
 *给你单链表的头节点 head ，请你反转链表，并返回反转后的链表。
 

示例 1：


输入：head = [1,2,3,4,5]
输出：[5,4,3,2,1]

来源：力扣（LeetCode）
链接：https://leetcode.cn/problems/reverse-linked-list
著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
 * */

//递归翻转 返回翻转后的首节点
ListNode *reverseList(ListNode *head) {
    //第二次写 这个出错了没有写 node->next == nullptr 这样搞的返回的就不是尾部节点了是null了

    if (head == nullptr || head->next == nullptr)
        return head;

    // 1 2 3 4 5
    ListNode *temp = reverseList(head->next);//一直递归到尾部

    //翻转
    //假如 temp 返回了 5 4 头是5 temp=5;
    head->next->next = head;

    head->next = nullptr;//todo 自己写的这个指针也没有指向null 要不没有打断


    return temp;
}